.TH std::endian 3 "2024.06.10" "http://cppreference.com" "C++ Standard Libary"
.SH NAME
std::endian \- std::endian

.SH Synopsis
   Defined in header <bit>
   enum class endian

   {
       little = /*implementation-defined*/,  \fI(since C++20)\fP
       big    = /*implementation-defined*/,
       native = /*implementation-defined*/,

   };

   Indicates the endianness of all scalar types:

     * If all scalar types are little-endian, std::endian::native equals
       std::endian::little.
     * If all scalar types are big-endian, std::endian::native equals std::endian::big.

   Corner case platforms are also supported:

     * If all scalar types have sizeof equal to 1, endianness does not matter and all
       three values, std::endian::little, std::endian::big, and std::endian::native are
       the same.
     * If the platform uses mixed endian, std::endian::native equals neither
       std::endian::big nor std::endian::little.

.SH Possible implementation

 enum class endian
 {
 #if defined(_MSC_VER) && !defined(__clang__)
     little = 0,
     big    = 1,
     native = little
 #else
     little = __ORDER_LITTLE_ENDIAN__,
     big    = __ORDER_BIG_ENDIAN__,
     native = __BYTE_ORDER__
 #endif
 };

.SH Notes

   Feature-test macro  Value    Std     Feature
   __cpp_lib_endian   201907L (C++20) std::endian

.SH Example


// Run this code

 #include <bit>
 #include <iostream>

 int main()
 {
     if constexpr (std::endian::native == std::endian::big)
         std::cout << "big-endian\\n";
     else if constexpr (std::endian::native == std::endian::little)
         std::cout << "little-endian\\n";
     else
         std::cout << "mixed-endian\\n";
 }

.SH Possible output:

 mixed-endian

.SH See also

   byteswap reverses the bytes in the given integer value
   (C++23)  \fI(function template)\fP
